package utils

import (
	"encoding/json"
	"io/ioutil"
	"zinx/ziface"
)

/*
	存储一切有zinx大框架的全局配置参数， 供其他模块使用
    一些参数是可以通过zinx.json由用户配置
*/

type GlobalObj struct {
	/*
		Server
	*/
	TcpServer ziface.IServer // 当前zinx全局的server对象
	Host      string         // 当前主机所监听的ip
	TcpPort   int            // 当前主机所监听的端口
	Name      string         // 当前服务器的名称

	/*
		zinx
	*/
	Version        string // 当前zinx的版本号
	MaxConn        int    // 当前服务器主机允许的最大连接数
	MaxPackageSize uint32 // 当前zinx框架数据包的最大值
}

/*
定义一个全局的对象
*/

var GlobalObject *GlobalObj

func (s *GlobalObj) Reload() {
	data, err := ioutil.ReadFile("./conf/zinx.json")
	if err != nil {
		panic(err)
	}
	// 将json文件数据解析到struct中
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		panic(err)
	}
}

// 提供一个init方法， 初始化当前的globalObject
func init() {
	GlobalObject = &GlobalObj{
		Name:           "ZinxServerApp",
		Version:        "tcp4",
		TcpPort:        8999,
		Host:           "0.0.0.0",
		MaxConn:        1000,
		MaxPackageSize: 4096,
	}

	/// 加载当前用户自定义的参数
	GlobalObject.Reload()
}
